import path from 'path';
import fs from 'fs';
import inquirer from 'inquirer';

// 排序
function sortFilename(a, b) {
  return (+a.split('.')[0]) - (+b.split('.')[0]);
}

(function run() {
  inquirer
    .prompt([
      {
        type: 'input',
        message: '请输入需要重新排序的文件夹路径（可直接将父级文件夹拖拽进来）',
        name: 'dirPath',
        default: '',
      },
    ])
    .then(({ dirPath }) => {
      dirPath = dirPath.replace(/'/g, '').replace(/"/g, '').trim();

      if (!fs.existsSync(dirPath)) {
        console.log('文件夹不存在，请重新输入(注意文件夹名称不要带单引号或双引号！)');
        run();
      } else {
        const files = fs.readdirSync(path.resolve(dirPath)).filter((filename) => {
          const bflag = /^\./.test(filename);

          return !bflag;
        });

        // 检查所有文件名称是否符合要求
        // 如果存在不符合要求的文件名称，则列出错误文件列表，并提示用户修改文件名
        const errorNameArray = []; // 格式错误的文件名称

        for (let i = 0; i < files.length; i++) {
          const filename = files[i];
          const num = parseInt(filename.split('.')[0]);

          if (isNaN(num) || filename.split('.').length !== 2) {
            errorNameArray.push(files[i]);
          }
        }

        if (errorNameArray.length > 0) {
          console.log('错误！文件夹中存在不符合要求的文件名，请按照：1.文件名 2.文件名 这种格式进行命名.');
          console.log('==========================================================');
          console.log('错误名称文件:', errorNameArray);
          process.exit(1);
        }

        files.sort(sortFilename);

        files.forEach((filename, index) => {
          const originFilename = filename;
          const number = index + 1;

          filename = filename.split('.')[1];

          const newFilename = `${number}.${filename}`;

          fs.renameSync(
            path.resolve(dirPath, originFilename),
            path.resolve(dirPath, newFilename)
          );
        })
        const formattedFilenames = fs.readdirSync(path.resolve(dirPath))
          .filter((filename) => {
            const bflag = /^\./.test(filename);

            return !bflag;
          })
          .sort(sortFilename);

        console.log('成功：脚本执行完成');
        console.log('格式化后的文件目录列表：', formattedFilenames);

        process.exit(1);
      }
    })
    .catch((e) => {
      console.log(e);
    });
})();